# 吃饭
import time
from multiprocessing import Process, Pool


# 模拟一个吃饭的任务
def eat(name):
    for i in range(6):
        print(f'正在吃饭。。。{name}')
        time.sleep(0.3)


# 模拟一个做作业的任务
def work():
    for i in range(6):
        print('正在做作业。。。')
        time.sleep(0.3)


# 模拟一个打游戏的任务
def game():
    for i in range(6):
        print('正在打游戏。。。')
        time.sleep(0.3)


if __name__ == '__main__':  # 主进程
    # 创建一个进程池，规定最多只有2个进程
    process_pool = Pool(2)

    # apply()函数来执行任务,
    # apply函数是一个阻塞函数，由主函数执行，从进程池中请求一个新的进程去执行
    # process_pool.apply(eat, args=('张三',))  # args 传参
    # process_pool.apply(work)

    # apply_async()函数 异步调用，非阻塞
    process_pool.apply_async(eat, args=('张三',))  # args 传参
    process_pool.apply_async(work)

    process_pool.apply_async(game)


    process_pool.close()
    # 采用进程池的异步调用，一定要手动调用join函数
    process_pool.join()
